package com.zjh.workflow.flowable.service;

import com.zjh.workflow.flowable.entity.TaskInputParam;
import com.zjh.workflow.flowable.entity.WorkflowProcessInstance;
import com.zjh.workflow.flowable.entity.vo.HighLightElementVO;
import com.zjh.workflow.flowable.entity.vo.NodeDetailVO;
import org.flowable.engine.runtime.ProcessInstance;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

public interface ProcessInstanceService {

    /**
     * 创建一个流程实例
     */
    ProcessInstance newProcessInstance(TaskInputParam taskInputParam);

    /**
     * 获取所有正在运行的流程
     */
    List<WorkflowProcessInstance> getAllRunningInstances();

    /**
     * 获取历史流程列表
     */
    List<WorkflowProcessInstance> getAllHistoryInstances();

    /**
     * 根据流程定义查询 所有在运行的流程实例
     */
    List<WorkflowProcessInstance> getRunningInstancesByProcessId(String processDefinitionId);


    /**
     * 根据流程定义Key查询 所有在运行的流程实例
     */
    List<WorkflowProcessInstance> getRunningInstancesByProcessKey(String processDefinitionKey);


    /**
     * 根据流程实例Id获取当前活动的任务Id
     */
    List<String> getCurrentTaskIdsByProcessInstanceId(String processInstanceId);


    /**
     * 生成流程图 base64 URL
     */
    String genProcessDiagrams(String taskId, HttpServletResponse httpServletResponse) throws IOException;


    // 获取高亮节点列表
    HighLightElementVO getHighLightedFlows(String processInstanceId);

    NodeDetailVO getNodeDetails(String flowId, String activityId);
}
